// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL =    /* 根域名 */
		// 'https://yzy.yizuyun.cn/manager';
		// 'https://www.haicity.net/manager';
		// 'http://192.168.1.51/manager';
		'http://ksr4r4.natappfree.cc'
        return config
    })
	
	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	    // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
	    config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		if(config.url.indexOf('/wx/login')==-1) {//表示请求路径有/wx/login的不加token
		    uni.showLoading({
		     	title: '拼命加载中...'
		    })
			// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
			config.header.Authorization ='Bearer ' + vm.$store.state['m_user'].token
		}else{
			uni.showLoading({
				title: '登录中...'
			})
		}
	    return config 
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
	    uni.hideLoading()
		const data = response.data
		// 自定义参数
		
		const custom = response.config?.custom
		if (data.code !== 0) {
			
			/*
			Ifauthentication是否身份验证 有则不执行 无则执行 默认无（防止一些页面有接口，此时身份验证执行一次即可，重新登录）
			custom: { Ifauthentication:true }
			*/
			if(!custom.Ifauthentication&&(data.code==403||data.code==401)){//登录过期或者身份失败
				uni.showModal({
					title: '提示',
					confirmText: "去登录", // 确认按钮的文字 
					showCancel:false,
					content: "登录过期，请重新登录",
					complete() {
						uni.$u.route('/subpkg/simplePage/simplePage', {
							title: '登录',
							IfonShow: 'true'
						});
					}
				})
			}
			// 如果没有显式定义custom的toast参数为false的话，并且code不为 0、401、403默认对报错进行toast弹出提示
			if (custom.toast !== false&&(data.code!=403&&data.code!=401)) {
				uni.$u.toast(data.msg)
			}
			// 如果需要catch返回，则进行reject
			if (custom?.catch) {
				return Promise.reject(data)
			}else {
				// 否则返回一个pending中的promise，请求不会进入catch中
				return new Promise(() => { })
			}
		}
		//code为0时返回
		if(custom.loadingText){//custom.loadingText不为空 提示信息  custom: { loadingText:'登陆成功' }
			uni.$u.toast(custom.loadingText)
		}
		return data === undefined ? {} : data  //在页面中接口有返回表示该接口成功返回
		
	}, (response) => { 
		// 对响应错误做点什么 （statusCode !== 200）
		uni.$u.toast('服务器错误')
		// return Promise.reject(response)
		return new Promise(() => { })
	})
}